17. Solutions: LEFT and RIGHT JOIN
LEFT and RIGHT JOIN Solutions
This section is a walkthrough of those final two problems in the previous concept. First, another look at the two tables we are working with:
INNER JOIN Question
The questions are aimed to assure you have a conceptual idea of what is happening with LEFT and INNER JOINs before you need to use them for more difficult problems.
For an INNER JOIN like the one here:
SELECT c.countryid, c.countryName, s.stateName
FROM Country c
JOIN State s
ON c.countryid = s.countryid;
We are essentially JOINing the matching PK-FK links from the two tables, as shown in the below image.
The resulting table will look like:
countryid | countryName | stateName |
---|---|---|
1 | India | Maharashtra |
1 | India | Punjab |
2 | Nepal | Kathmandu |
3 | United States | California |
3 | United States | Texas |
4 | Canada | Alberta |
LEFT JOIN Question
The questions are aimed to assure you have a conceptual idea of what is happening with LEFT and INNER JOINs before you need to use them for more difficult problems.
For a LEFT JOIN like the one here:
SELECT c.countryid, c.countryName, s.stateName
FROM Country c
LEFT JOIN State s
ON c.countryid = s.countryid;
We are essentially JOINing the matching PK-FK links from the two tables, as we did before, but we are also pulling all the additional rows from the Country table even if they don't have a match in the State table. Therefore, we obtain all the rows of the INNER JOIN, but we also get additional rows from the table in the FROM.
The resulting table will look like:
countryid | countryName | stateName |
---|---|---|
1 | India | Maharashtra |
1 | India | Punjab |
2 | Nepal | Kathmandu |
3 | United States | California |
3 | United States | Texas |
4 | Canada | Alberta |
5 | Sri Lanka | NULL |
6 | Brazil | NULL |
FINAL LEFT JOIN Note
If we were to flip the tables, we would actually obtain the same exact result as the JOIN statement:
SELECT c.countryid, c.countryName, s.stateName
FROM State s
LEFT JOIN Country c
ON c.countryid = s.countryid;
This is because if State is on the LEFT table, all of the rows exist in the RIGHT table again.
The resulting table will look like:
countryid | countryName | stateName |
---|---|---|
1 | India | Maharashtra |
1 | India | Punjab |
2 | Nepal | Kathmandu |
3 | United States | California |
3 | United States | Texas |
4 | Canada | Alberta |